home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
wb
/
czesc_4
/
viruscheck
/
checkarc1_10.lha
/
CheckArcUk.vzrx
< prev
Wrap
Text File
|
1996-10-24
|
11KB
|
270 lines
/*
$VER: CheckArcUk.vzrx 1.1 (24.10.96)
© 1996 by Jean-Philippe MISTROT
*/
Trace OFF
/* External Programs */
Prog_VirusZ = 'UTILITAIRES:SHAREWARE/VIRUSZ/VirusZ'
Prog_Lha = 'C:Lha'
Prog_Lzx = 'C:Lzx'
Prog_Dms = 'C:Dms' /* A registered version is needed for physical error checking */
Prog_Zip = 'C:Unzip'
Prog_Rar = 'C:Unrar'
/* CheckArcUk.vzrx needs the following files */
ListeProbleme = 'RAM:CheckArc.Problems'
Liste1 = 'RAM:CheckArc.ArchivesList1'
Liste2 = 'RAM:CheckArc.ArchivesList2'
SortieDMS = 'RAM:CheckArc.DMSOutput'
/* Variable initializations */
TempPath = 'T:CheckArcTMP' /* THIS PATH WILL BE RECURSIVELY ERASED AT THE END OF THE SCRIPT */
TempPath2 = 'blabla'
TempPathDMS = 'RAD1:'
UseQuitFlag = 'no'
NomParDefaut = 'ProblemsList'
Symbole = '32m->31m'
AddLib('rexxreqtools.library',5,-30)
IF rc = 0 THEN DO
SAY 'CheckArcUk.vzrx needs RexxReqTools.library...'
EXIT
END
AddLib('rexxsupport.library',5,-30)
IF rc = 0 THEN DO
SAY 'Veuillez vous procurer la RexxSupport.library...'
EXIT
END
IF Right(TempPath,1) = ':' THEN DO
SAY 'CheckArcUk.vzrx needs a temporary directory.'
SAY ''TempPath', is not enough !!!'
EXIT
END
IF Length(Symbole) > 29 | Length(Symbole) < 1 THEN DO
SAY 'The symbol must have by 1 to 29 characters !!!'
EXIT
END
IF Right(TempPath,1) = '/' THEN TempPath = DelStr(TempPath,Length(TempPath))
PARSE ARG Argument
IF Argument = '' THEN DO
Choix = rtezrequest('What do you want to check ?','Directory|Archive')
IF Choix = 1 THEN Argument = rtfilerequest(,,'Select a directory...',,'rtfi_flags = freqf_nofiles')
ELSE Argument = rtfilerequest(,,'Select an archive...',,'rtfi_flags = freqf_patgad rtfi_matchpat = (#?.lha|#?.lzh|#?.lzx|#?.run|#?.dms|#?.zip|#?.rar)')
END
IF rtresult = 0 THEN EXIT
IF Pos('"',Argument) ~= 0 THEN Argument = COMPRESS(Argument,'"')
IF ~Exists(Argument) THEN DO
SAY 'The Argument is incorrect !!!'
EXIT
END
IF SubStr(STATEF(Argument),1,3) = 'DIR' THEN DO
ADDRESS command 'C:List >"'Liste2'" "'Argument'" P=(*.lha|*.lzh|*.lzx|*.dms|*.run|*.zip|*.rar) FILES LFORMAT "%P%S" ALL'
IF rc ~= 0 THEN DO
SAY 'A problem occurs : list creation failed !!!'
EXIT
END
END
ELSE DO
IF Right(UPPER(Argument),4) = '.LHA' | Right(UPPER(Argument),4) = '.LZH' | Right(UPPER(Argument),4) = '.LZX' | Right(UPPER(Argument),4) = '.DMS' | Right(UPPER(Argument),4) = '.RUN' | Right(UPPER(Argument),4) = '.ZIP' | Right(UPPER(Argument),4) = '.RAR' THEN DO
ArcToCheck = Argument
CALL Recursivite
CALL DeleteTemp
CALL QuitVirusZ
END
SAY 'Use : Rx CheckArcUk.vzrx (ARC|CHEMIN)'
EXIT
END
IF SubStr(STATEF(Liste2),6,1) = '0' THEN DO
SAY 'Your path doesn''t contain archive !!!'
ADDRESS command 'C:Delete >NIL: "'Liste2'" QUIET'
EXIT
END
ADDRESS command 'C:Sort >NIL: "'Liste2'" "'Liste2'"'
Open('Liste2',Liste2,'R')
DO WHILE ~eof('Liste2')
ArcToCheck = ReadLn('Liste2')
IF ArcToCheck ~= '' THEN DO
TempPath2 = 'blabla'
CALL Recursivite
CALL DeleteTemp
END
END
Close('Liste2')
ADDRESS command 'C:Delete >NIL: "'Liste2'" QUIET'
CALL QuitVirusZ
Recursivite:
DO WHILE TempPath2 ~= TempPath
IF ArcToCheck ~= '' THEN CALL Decompresse
IF Pos(TempPath,ArcToCheck) ~= 0 THEN ADDRESS command 'C:Delete >NIL: "'ArcToCheck'" QUIET FORCE'
ADDRESS command 'C:List >"'Liste1'" "'TempPath2'" P=(*.lha|*.lzh|*.lzx|*.dms|*.run|*.zip|*.rar) FILES LFORMAT "%P%S" ALL'
IF rc ~= 0 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','ERROR !!! during recursive examination of directory 'TempPath2'')
RETURN
END
Open('Liste1',Liste1,'R')
ArcToCheck = ReadLn('Liste1')
Close('Liste1')
IF ArcToCheck = '' THEN DO
SAY TempPath2
CALL CheckVirus
ADDRESS command 'C:Delete >NIL: "'TempPath2'" ALL QUIET FORCE'
TempPath2 = DelStr(TempPath2,LastPos('/',TempPath2))
END
END
RETURN
CheckVirus:
IF ~show(ports,VIRUSZ_II.REXX) THEN DO
SAY 'Starting VirusZ...'
ADDRESS command '"'Prog_VirusZ'"'
StartTime = Time(seconds)
DO WHILE ~show(ports,VIRUSZ_II.REXX)
IF Time(seconds) - StartTime > 20 THEN DO
SAY 'ERROR loading VirusZ !!!'
EXIT
END
END
END
IF Exists(TempPath2) THEN DO
SAY ' Verifying archive...'
ADDRESS VIRUSZ_II.REXX CHECKDIR '"'TempPath2'"' DECREXEC DECRDATA
IF rc = 0 THEN SAY ' Archive is clean.'
IF rc = 5 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','32mVIRUS31m located in 'TempPath2'')
END
IF rc = 10 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','ERROR !!! checking archive 'TempPath2'')
END
END
RETURN
Decompresse:
IF Pos('/',ArcToCheck) = 0 THEN
IF Pos(':',ArcToCheck) = 0 THEN NomArchive = ArcToCheck
ELSE NomArchive = SubStr(ArcToCheck,Pos(':',ArcToCheck)+1)
ELSE NomArchive = SubStr(ArcToCheck,LastPos('/',ArcToCheck)+1)
IF Length(NomArchive) > 29-Length(Symbole) THEN NomArchive = SubStr(NomArchive,1,29-Length(Symbole))
IF Pos(TempPath,ArcToCheck) = 0 THEN TempPath2 = ''TempPath'/'Symbole''NomArchive''
ELSE TempPath2 = ''SubStr(ArcToCheck,1,LastPos('/',ArcToCheck))''Symbole''NomArchive''
IF Right(UPPER(ArcToCheck),4) = '.LHA' | Right(UPPER(ArcToCheck),4) = '.LZH' | Right(UPPER(ArcToCheck),4) = '.RUN' THEN DO
IF ~EXISTS(TempPath) THEN ADDRESS command 'C:MakeDir >NIL: "'TempPath'"'
ADDRESS command 'C:MakeDir >NIL: "'TempPath2'"'
ADDRESS command '"'Prog_Lha'" >NIL: -M x "'ArcToCheck'" "'TempPath2'/"'
IF rc ~= 0 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','ERROR !!! extracting 'ArcToCheck'')
END
RETURN
END
IF Right(UPPER(ArcToCheck),4) = '.LZX' THEN DO
ADDRESS command '"'Prog_Lzx'" >NIL: x "'ArcToCheck'" "'TempPath2'/"'
IF rc ~= 0 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','ERROR !!! extracting 'ArcToCheck'')
END
RETURN
END
IF Right(UPPER(ArcToCheck),4) = '.DMS' THEN DO
ADDRESS command '"'Prog_Dms'" <NIL: >"'SortieDMS'" WRITE "'ArcToCheck'" TO 'TempPathDms' NOTEXT'
IF rc ~= 0 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','ERROR !!! extracting 'ArcToCheck'')
END
Open('SortieDMS',SortieDMS,'R')
DO WHILE ~eof('SortieDMS')
Ligne = ReadLn('SortieDMS')
IF Pos('READ ERRORS:',Ligne) ~= 0 THEN DO
Compteur1 = Pos(':',Ligne)+3
Compteur2 = Pos(':',Ligne,Compteur1)+3
IF SubStr(Ligne,Compteur1,1) ~= '0' | SubStr(Ligne,Compteur2,1) ~= '0' THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme',''SubStr(Ligne,2)' 'ArcToCheck'')
END
END
END
Close('SortieDMS')
ADDRESS command 'C:Delete >NIL: "'SortieDMS'" QUIET'
IF ~EXISTS(TempPath) THEN ADDRESS command 'C:MakeDir >NIL: "'TempPath'"'
ADDRESS command 'C:MakeDir >NIL: "'TempPath2'"'
ADDRESS command 'C:Copy >NIL: 'TempPathDMS' TO "'TempPath2'" ALL QUIET'
IF rc ~= 0 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','ERROR !!! copying files from 'TempPathDMS' 'ArcToCheck'')
END
ADDRESS command 'C:Dir >NIL: 'TempPathDMS''
IF rc ~= 0 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','Not a DOS disk in 'TempPathDMS' 'ArcToCheck'')
END
RETURN
END
IF Right(UPPER(ArcToCheck),4) = '.ZIP' THEN DO
IF ~EXISTS(TempPath) THEN ADDRESS command 'C:MakeDir >NIL: "'TempPath'"'
ADDRESS command '"'Prog_Zip'" >NIL: "'ArcToCheck'" -d "'TempPath2'"'
IF rc ~= 0 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','ERROR !!! extracting 'ArcToCheck'')
END
RETURN
END
IF Right(UPPER(ArcToCheck),4) = '.RAR' THEN DO
ADDRESS command '"'Prog_Rar'" >NIL: x "'ArcToCheck'" "'TempPath2'/"'
IF rc ~= 0 THEN DO
IF ~exists(ListeProbleme) THEN Open('ListeProbleme',ListeProbleme,'W')
WriteLn('ListeProbleme','ERROR !!! extracting 'ArcToCheck'')
END
END
RETURN
DeleteTemp:
ADDRESS command 'C:Delete >NIL: "'Liste1'" QUIET'
IF Exists(TempPath) THEN DO
SAY ' Deleting temporary directory...'
ADDRESS command 'C:Delete >NIL: "'TempPath'" ALL QUIET FORCE'
IF rc ~= 0 THEN DO
SAY ' ERROR deleting temporary directory !!!'
CALL QuitVirusZ
END
END
RETURN
QuitVirusZ:
IF UPPER(UseQuitFlag) = 'YES' THEN DO
SAY 'Quitting VirusZ...'
ADDRESS VIRUSZ_II.REXX QUIT
END
IF Exists(ListeProbleme) THEN DO
Close('ListeProbleme')
Open('ListeProbleme',ListeProbleme,'R')
SAY ''
SAY '*** PROBLEMS LIST ***'
DO WHILE ~eof('ListeProbleme')
SAY ' 'ReadLn('ListeProbleme')
END
Close('ListeProbleme')
Choix = rtezrequest('Do you want to save the report ?','Yes|No')
IF Choix = 1 THEN DO
IF Pos('/',Argument) = 0 THEN
IF Pos(':',Argument) = 0 THEN Repertoire = ''
ELSE Repertoire = SubStr(Argument,1,Pos(':',Argument))
ELSE Repertoire = SubStr(Argument,1,LastPos('/',Argument))
Fichier = rtfilerequest(Repertoire,NomParDefaut,'Select a file...')
ADDRESS command 'C:Copy >NIL: "'ListeProbleme'" "'Fichier'"'
END
ADDRESS command 'C:Delete >NIL: "'ListeProbleme'" QUIET'
END
EXIT